import java.io.*;
import java.util.*;
import estoque.view.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Arquivo {
   
   public static void verificaArquivo(){
    File farq = new File( "arquivo.txt" );
     try {
          if (!farq.exists()) farq.createNewFile();
          FileReader fr = new FileReader(farq);
          BufferedReader lerArq = new BufferedReader(fr);
          String registro = lerArq.readLine(); // lê primeira linha
        
          // arquivo com conteúdo, passar dados para os arrays
          if (registro != null)  lerArquivo(farq);
   
   }catch (IOException e) { System.err.printf("Erro ao abrir arquivo: %s.\n", e.getMessage()); } 
    
    }
    
    
    public static void lerArquivo(File farq)
                             
                                throws FileNotFoundException, IOException
  {
      Scanner ler = new Scanner(System.in);
      FileReader fr = new FileReader(farq);
      BufferedReader lerArq = new BufferedReader(fr);
      String registro = lerArq.readLine(); // lê primeira linha
      int q;
      // enquanto arquivo tem conteúdo, passa para os arrays     
      while(registro != null)  {
           // verifica operação escrita no arquivo, cria os objetos no array
           switch (registro) {                     
              case "cliente":
                  JFControle.clientes.add(new Cliente(lerArq.readLine(),lerArq.readLine(),lerArq.readLine()));
                  registro = lerArq.readLine(); 
                  break;
                            
              case "item":
                  JFControle.itens.add(new Item(lerArq.readLine(),0, Float.parseFloat(lerArq.readLine())));
                  registro = lerArq.readLine(); 
                  break;
                            
              case "compra":
                  JFControle.compras.add(new Compra( registro = lerArq.readLine(), q = Integer.parseInt(lerArq.readLine()),
                                          Float.parseFloat(lerArq.readLine() )) );
                  for (Item x : JFControle.itens){
                         if( registro.equals(x.getItem()) )
                              x.setEstoque(x.getEstoque() + q) ;
                  }
                  registro = lerArq.readLine(); 
                  break;
                             
              case "venda":
                  float pt=0;
                  // cria objeto apenas com nome do cliente
                  JFControle.vendas.add(new Venda( registro = lerArq.readLine()));
                  for(Venda x : JFControle.vendas){
                        // procura objeto de venda desse cliente
                        if(registro.equals(x.getCliente())){
                               registro = lerArq.readLine();
                               do {
                                   q = Integer.parseInt(registro);
                                   registro = lerArq.readLine();
                                   // diminui o estoque do item
                                   for(Item y : JFControle.itens){
                                           if(registro.equals(y.getItem())) {
                                                 y.setEstoque(y.getEstoque() - q);
                                                 pt = q * y.getPreco_venda();
                                           }
                                   }
                                   // passa a venda item por item ao array de itens vendidos
                                   x.itens_vendidos.add(new Item(registro,q,pt));
                                   registro = lerArq.readLine();
                                          
                               } while(!"".equals(registro) && registro != null);     
                          }
                  }
                          
           } //fim switch
           registro= lerArq.readLine();        
      } //fim while

  }
      
      public static void chamaGravacao(){
         File farq = new File( "arquivo.txt" );        
         // deletar e criar novamente o arquivo
         farq.delete();
         try {
              farq.createNewFile();
              // gravar todos dados (arrays) no arquivo
              Arquivo.gravarArquivo(farq);   
         } catch (IOException ex) {
              Logger.getLogger(JFControle.class.getName()).log(Level.SEVERE, null, ex);
         }
     } 
      
   public static void gravarArquivo(File farq) throws IOException {
      int q=0;
      FileWriter fw = new FileWriter(farq);
      BufferedWriter bw = new BufferedWriter(fw);
      // percorre ArrayList de cada tipo, e escreve os dados no arquivo
      for(Cliente x : JFControle.clientes){
            if (q!=0) bw.newLine();
            bw.write("cliente"); bw.newLine(); bw.write(x.getNome()); bw.newLine();
            bw.write(x.getEndereco()); bw.newLine(); bw.write(x.getTel()); bw.newLine();
            q++;
     }
     for(Item x : JFControle.itens){
         bw.newLine(); bw.write("item"); bw.newLine(); bw.write(x.getItem()); bw.newLine();
         bw.write(String.valueOf(x.getPreco_venda()) ); bw.newLine();
     }
     for(Compra x : JFControle.compras){
         bw.newLine();
         bw.write("compra"); bw.newLine(); bw.write(x.getItem()); bw.newLine();
         bw.write( String.valueOf(x.getQuantidade2()) ); bw.newLine();  
         bw.write(String.valueOf(x.getPrecoTotal()) );   bw.newLine();
     }
     for(Venda x: JFControle.vendas){
         bw.newLine(); bw.write("venda"); bw.newLine(); bw.write(x.getCliente());
         for(Item y: x.itens_vendidos){
            bw.newLine(); bw.write(String.valueOf (y.getQuantidade()));
            bw.newLine(); bw.write(y.getItem());
        }
        bw.newLine();
    }
 
    bw.close();
    fw.close();
  }
   
   
}
